'''
    参数功能简述：
        通过 0-4的整型数来改变当前的通知类型

    全局参数编写：
        声明参数的 键值对
        使用 get_parameter("notice_type").value 获取当前参数的值
        使用 rclpy.parameter.Parameter('notice_type', rclpy.Parameter.Type.INTEGER, 1) 生成参数对象
                                        参数名              参数类型                新值
        使用 self.set_parameters([change_value]) 将对象列表化并传入系统设置

        
    静态启动：
        ros2 run my_param param_notice --ros-args -p notice_type:=3
    动态测试：
        ros2 param set /param_notice_type notice_type 2
'''


import rclpy
from rclpy.node import Node


class ParameterNode(Node):
    def __init__(self, name):
        super().__init__(name)
        self.declare_parameter("notice_type", 1)                    # 声明参数的键值
        self.timer = self.create_timer(1.0, self.time_callback)     # 创建时间回调函数
        self.get_logger().info(f"Node \"{name}\" is ready!")
    
    def time_callback(self):
        value = self.get_parameter("notice_type").value             # 获取系统某个参数的值
        if value in [0, 1, 2, 3, 4]:
            if value == 0:
                self.get_logger().debug("I'm Debug!")
            elif value == 1:
                self.get_logger().info("I'm Info!")
            elif value == 2:
                self.get_logger().warn("I'm Warn!")
            elif value == 3:
                self.get_logger().error("I'm Error!")
            elif value == 4:
                self.get_logger().fatal("I'm Fatal!")
        else:
            self.get_logger().warn("{:*^15}".format(value))
            self.get_logger().warn("{:-^15}".format("TypeErrpr"))
            self.get_logger().warn("{:*^15}".format("back"))
            change_value = rclpy.parameter.Parameter('notice_type', rclpy.Parameter.Type.INTEGER, 1)    # 生成新的键值对象
            self.set_parameters([change_value])                     # 转为列表传入系统变更


def main(args=None):
    rclpy.init(args=args)
    node = ParameterNode("param_notice_type")
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()
            